package org.jsola.hr.service;

import org.jsola.hr.vo.DynamicCodeVO;
import org.jsola.hr.vo.QRCodeVO;
import org.jsola.user.core.TokenUser;

import java.util.Date;

public interface IQRCodeService {

    /**
     * 获取二维码
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     * @return 二维码对象
     */
    QRCodeVO getQRCode(String companyId, TokenUser tokenUser);

    /**
     * 生成二维码
     *
     * @param companyId  公司id
     * @param postType   员工性质
     * @param validDays  有效天数
     * @param flowId     审批流程id
     * @param expireDate 过期时间
     * @param status     员工状态
     * @param tokenUser  当前用户
     * @return 二维码对象
     */
    QRCodeVO generateQRCode(String companyId, Integer postType, Integer validDays, String flowId, Date expireDate,
                            Integer status, TokenUser tokenUser);

    /**
     * 生成二维码
     *
     * @param qrCodeVO  生成二维码对象
     * @param tokenUser 当前用户
     * @return 二维码对象
     */
    QRCodeVO generateQRCode(QRCodeVO qrCodeVO, TokenUser tokenUser);

    /**
     * 根据缓存key获取二维码信息
     *
     * @param key 缓存key
     * @return 二维码信息
     */
    QRCodeVO getByKey(String key);

    /**
     * 获取管理端小程序二维码
     *
     * @param companyId 公司id
     * @param channelId 渠道id
     * @param type      类型; 1:预登记 2:待入职
     * @param tokenUser 当前用户
     * @return 二维码对象
     */
    QRCodeVO getManageQRCode(String companyId, String channelId, Integer type, TokenUser tokenUser);

    /**
     * 根据用工单位id获取动态码
     *
     * @param companyId 用工单位id 之前的的动态码
     * @param channelId 渠道id
     * @param oldCode   之前的的动态码
     * @param type      类型; 1:预登记 2:待入职
     * @param tokenUser 当前用户
     * @return 动态码对象
     */
    DynamicCodeVO getDynamicCode(String companyId, String channelId, String oldCode, Integer type, TokenUser tokenUser);

    /**
     * 根据动态码获取用工单位信息
     *
     * @param code 动态码
     * @return 用工单位信息
     */
    DynamicCodeVO getByDynamicCode(String code);

    /**
     * 生成发薪的二维码
     *
     * @param batchId   批次id
     * @param batchType 发薪类型
     * @param siteId    租户id
     * @param tokenUser 当前用户
     * @return 二维码url
     */
    String generateSalaryQRCode(String batchId, Integer batchType, String siteId, TokenUser tokenUser);

    /**
     * 根据用工单位id获取扫码入职信息
     *
     * @param companyId 用工单位id
     * @param tokenUser 当前登录人
     * @return QRCodeVO
     */
    QRCodeVO getQRCodeByCompanyId(String companyId, TokenUser tokenUser);
}
